package lormi.meipin.controller.api;

import lormi.meipin.annotation.NotValidUser;
import lormi.meipin.common.Result;
import lormi.meipin.controller.BaseController;
import lormi.meipin.dto.CheckCodeDto;
import lormi.meipin.dto.RegMerChant;
import lormi.meipin.dto.RegTalent;
import lormi.meipin.exception.LMException;
import lormi.meipin.vo.LoginVo;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

@RestController
@RequestMapping(value="v2",method = RequestMethod.POST, produces = "application/json; charset=utf-8")
public class LoginController extends BaseController {

	/**
	 * 发送验证码
	 * @param phone 手机号
	 */
	@Valid
	@NotValidUser
	@RequestMapping("sendcode")
	public String sendPhone(
			@NotNull(message = "120006") 
			@Pattern(regexp = "^1[0-9]{10}", message = "120007") 
			@RequestParam(value = "phone", required = false) 
			String phone) throws LMException {
		
		checkCodeService.sendPhoneCode(phone);
		
		return Result.success();
	}

	/**
	 * 验证手机验证码、邀请码
	 * 
	 * @Param phone 手机号
	 * @Param code 手机验证码
	 * @Param invitationcode 邀请码 可以不传
	 * 
	 * @Param deviceid 设备标识
	 * @Param osname 操作系统名称
	 * @Param version 操作系统版本
	 * @Param longitude 精度 必填
	 * @Param latitude 维度 必填
	 */
	@NotValidUser
	@RequestMapping("checkcode")
	public String checkPhoneCode(@Valid CheckCodeDto checkCodeDto,BindingResult result) throws LMException{
		//1.校验参数
		checkResult(result);
		
		//2.判断验证码是否有效,无效则抛出异常
		LoginVo loginVo = checkCodeService.checkCodeValid(checkCodeDto);
		
		return Result.success(loginVo);
	}

	/**
	 * 更新排序
	 * 
	 * @param userid id
	 * @param usertype 类型
	 */
	@RequestMapping("login/update")
	public String update(Integer userid,Integer usertype) throws LMException {
		
		if (usertype==1) {//个人
			expectWorkService.updateExpectWorkSort(userid);
		}else if(usertype==2){//商家
			positionService.updatePositionSort(userid);
		}
		
		return Result.success();
	}

	/**
	 * 注册人才信息 userType 1:人才
	 * 
	 * @Param phone 测试手机
	 * @Param imgurl 头像地址
	 * @Param username 姓名
	 * @Param sex 性别
	 * @Param age 年龄
	 * @Param workingage 工作年龄
	 * @Param currtitle 当前职位名称
	 * @Param workingstate 工作状态
	 * @Param label 个人亮点 每个亮点之间用";"分隔,例如1;2;3
	 *
	 * @Param deviceid 设备标识
	 * @Param osname 操作系统名称
	 * @Param version 操作系统版本
	 * @Param longitude 精度
	 * @Param latitude 维度
	 */
	@NotValidUser
	@RequestMapping("talent/register")
	public String regTalent(@Valid RegTalent regTalent,BindingResult result) throws LMException{
		checkResult(result);
		
		LoginVo loginVo = talentService.regTalent(regTalent);
		
		return Result.success(loginVo);
	}

	/**
	 * 注册人才信息 userType 2:商人
	 * 
	 * @Param phone 测试手机
	 * @Param imgurl 头像地址
	 * @Param username 姓名
	 * @Param sex 性别
	 * @Param nature 商家店铺类型，1:专业店 2:综合店 3:O2O上门
	 * @Param title 所任职位
	 * @Param company 公司全称
	 * @Param firmsize 公司规模
	 * @Param address 公司地址
	 * @Param label 商家亮点 每个亮点之间用";"分隔,例如1;2;3
	 * 
	 * @Param deviceid 设备标识
	 * @Param osname 操作系统名称
	 * @Param version 操作系统版本
	 * @Param longitude 精度
	 * @Param latitude 维度
	 */
	@NotValidUser
	@RequestMapping("merchant/register")
	public String regMerChant(@Valid RegMerChant regMerChant,BindingResult result) throws LMException{
		checkResult(result);
		
		LoginVo loginVo = merChantService.regMerChant(regMerChant);
		
		return Result.success(loginVo);
	}

}
